home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / ADA / GNAT / !gcc / adainc / 2 / ads / a-stwibo < prev    next >
Text File  |  1996-02-12  |  14KB  |  464 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT RUNTIME COMPONENTS                          --
  4. --                                                                          --
  5. --             A D A . S T R I N G S . W I D E _ B O U N D E D              --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.7 $                              --
  10. --                                                                          --
  11. -- This specification is adapted from the Ada Reference Manual for use with --
  12. -- GNAT.  In accordance with the copyright of that document, you can freely --
  13. -- copy and modify this specification,  provided that if you redistribute a --
  14. -- modified version,  any changes that you have made are clearly indicated. --
  15. --                                                                          --
  16. ------------------------------------------------------------------------------
  17.  
  18.  
  19. with Ada.Strings.Wide_Maps;
  20.  
  21. package Ada.Strings.Wide_Bounded is
  22. pragma Preelaborate (Wide_Bounded);
  23.  
  24.    generic
  25.       Max : Positive;
  26.       --  Maximum length of a Bounded_Wide_String
  27.  
  28.    package Generic_Bounded_Length is
  29.  
  30.       Max_Length : constant Positive := Max;
  31.  
  32.       type Bounded_Wide_String is private;
  33.  
  34.       Null_Bounded_Wide_String : constant Bounded_Wide_String;
  35.  
  36.       subtype Length_Range is Natural range 0 .. Max_Length;
  37.  
  38.       function Length (Source : in Bounded_Wide_String) return Length_Range;
  39.  
  40.       --------------------------------------------------------
  41.       -- Conversion, Concatenation, and Selection Functions --
  42.       --------------------------------------------------------
  43.  
  44.       function To_Bounded_Wide_String
  45.         (Source : in Wide_String;
  46.          Drop   : in Truncation := Error)
  47.          return   Bounded_Wide_String;
  48.  
  49.       function To_Wide_String
  50.         (Source : in Bounded_Wide_String)
  51.          return   Wide_String;
  52.  
  53.       function Append
  54.         (Left, Right : in Bounded_Wide_String;
  55.          Drop        : in Truncation  := Error)
  56.          return        Bounded_Wide_String;
  57.  
  58.       function Append
  59.         (Left  : in Bounded_Wide_String;
  60.          Right : in Wide_String;
  61.          Drop  : in Truncation := Error)
  62.          return  Bounded_Wide_String;
  63.  
  64.       function Append
  65.         (Left  : in Wide_String;
  66.          Right : in Bounded_Wide_String;
  67.          Drop  : in Truncation := Error)
  68.          return  Bounded_Wide_String;
  69.  
  70.       function Append
  71.         (Left  : in Bounded_Wide_String;
  72.          Right : in Wide_Character;
  73.          Drop  : in Truncation := Error)
  74.          return  Bounded_Wide_String;
  75.  
  76.       function Append
  77.         (Left  : in Wide_Character;
  78.          Right : in Bounded_Wide_String;
  79.          Drop  : in Truncation := Error)
  80.          return  Bounded_Wide_String;
  81.  
  82.       procedure Append
  83.         (Source   : in out Bounded_Wide_String;
  84.          New_Item : in Bounded_Wide_String;
  85.          Drop     : in Truncation  := Error);
  86.  
  87.       procedure Append
  88.         (Source   : in out Bounded_Wide_String;
  89.          New_Item : in Wide_String;
  90.          Drop     : in Truncation  := Error);
  91.  
  92.       procedure Append
  93.         (Source   : in out Bounded_Wide_String;
  94.          New_Item : in Wide_Character;
  95.          Drop     : in Truncation  := Error);
  96.  
  97.       function "&"
  98.         (Left, Right : in Bounded_Wide_String)
  99.          return        Bounded_Wide_String;
  100.  
  101.       function "&"
  102.         (Left  : in Bounded_Wide_String;
  103.          Right : in Wide_String)
  104.          return  Bounded_Wide_String;
  105.  
  106.       function "&"
  107.         (Left  : in Wide_String;
  108.          Right : in Bounded_Wide_String)
  109.          return  Bounded_Wide_String;
  110.  
  111.       function "&"
  112.         (Left  : in Bounded_Wide_String;
  113.          Right : in Wide_Character)
  114.          return  Bounded_Wide_String;
  115.  
  116.       function "&"
  117.         (Left  : in Wide_Character;
  118.          Right : in Bounded_Wide_String)
  119.          return  Bounded_Wide_String;
  120.  
  121.       function Element
  122.         (Source : in Bounded_Wide_String;
  123.          Index  : in Positive)
  124.          return   Wide_Character;
  125.  
  126.       procedure Replace_Element
  127.         (Source : in out Bounded_Wide_String;
  128.          Index  : in Positive;
  129.          By     : in Wide_Character);
  130.  
  131.       function Slice
  132.         (Source : in Bounded_Wide_String;
  133.          Low    : in Positive;
  134.          High   : in Natural)
  135.          return   Wide_String;
  136.  
  137.       function "="
  138.         (Left  : in Bounded_Wide_String;
  139.          Right : in Bounded_Wide_String)
  140.          return  Boolean;
  141.  
  142.       function "="
  143.         (Left  : in Bounded_Wide_String;
  144.          Right : in Wide_String)
  145.          return  Boolean;
  146.  
  147.       function "="
  148.         (Left  : in Wide_String;
  149.          Right : in Bounded_Wide_String)
  150.          return  Boolean;
  151.  
  152.       function "<"
  153.         (Left  : in Bounded_Wide_String;
  154.          Right : in Bounded_Wide_String)
  155.          return  Boolean;
  156.  
  157.       function "<"
  158.         (Left  : in Bounded_Wide_String;
  159.          Right : in Wide_String)
  160.          return  Boolean;
  161.  
  162.       function "<"
  163.         (Left  : in Wide_String;
  164.          Right : in Bounded_Wide_String)
  165.          return  Boolean;
  166.  
  167.       function "<="
  168.         (Left  : in Bounded_Wide_String;
  169.          Right : in Bounded_Wide_String)
  170.          return  Boolean;
  171.  
  172.       function "<="
  173.         (Left  : in Bounded_Wide_String;
  174.          Right : in Wide_String)
  175.          return  Boolean;
  176.  
  177.       function "<="
  178.         (Left  : in Wide_String;
  179.          Right : in Bounded_Wide_String)
  180.          return  Boolean;
  181.  
  182.       function ">"
  183.         (Left  : in Bounded_Wide_String;
  184.          Right : in Bounded_Wide_String)
  185.          return  Boolean;
  186.  
  187.       function ">"
  188.         (Left  : in Bounded_Wide_String;
  189.          Right : in Wide_String)
  190.          return  Boolean;
  191.  
  192.       function ">"
  193.         (Left  : in Wide_String;
  194.          Right : in Bounded_Wide_String)
  195.          return  Boolean;
  196.  
  197.       function ">="
  198.         (Left  : in Bounded_Wide_String;
  199.          Right : in Bounded_Wide_String)
  200.          return  Boolean;
  201.  
  202.       function ">="
  203.         (Left  : in Bounded_Wide_String;
  204.          Right : in Wide_String)
  205.          return  Boolean;
  206.  
  207.       function ">="
  208.         (Left  : in Wide_String;
  209.          Right : in Bounded_Wide_String)
  210.          return  Boolean;
  211.  
  212.       ----------------------
  213.       -- Search Functions --
  214.       ----------------------
  215.  
  216.       function Index
  217.         (Source  : in Bounded_Wide_String;
  218.          Pattern : in Wide_String;
  219.          Going   : in Direction := Forward;
  220.          Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
  221.          return    Natural;
  222.  
  223.       function Index
  224.         (Source  : in Bounded_Wide_String;
  225.          Pattern : in Wide_String;
  226.          Going   : in Direction := Forward;
  227.          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
  228.          return    Natural;
  229.  
  230.       function Index
  231.         (Source : in Bounded_Wide_String;
  232.          Set    : in Wide_Maps.Wide_Character_Set;
  233.          Test   : in Membership := Inside;
  234.          Going  : in Direction  := Forward)
  235.          return   Natural;
  236.  
  237.       function Index_Non_Blank
  238.         (Source : in Bounded_Wide_String;
  239.          Going  : in Direction := Forward)
  240.          return   Natural;
  241.  
  242.       function Count
  243.         (Source  : in Bounded_Wide_String;
  244.          Pattern : in Wide_String;
  245.          Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
  246.          return    Natural;
  247.  
  248.       function Count
  249.         (Source  : in Bounded_Wide_String;
  250.          Pattern : in Wide_String;
  251.          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
  252.          return    Natural;
  253.  
  254.       function Count
  255.         (Source : in Bounded_Wide_String;
  256.          Set    : in Wide_Maps.Wide_Character_Set)
  257.          return   Natural;
  258.  
  259.       procedure Find_Token
  260.         (Source : in Bounded_Wide_String;
  261.          Set    : in Wide_Maps.Wide_Character_Set;
  262.          Test   : in Membership;
  263.          First  : out Positive;
  264.          Last   : out Natural);
  265.  
  266.       ------------------------------------
  267.       -- Wide_String Translation Subprograms --
  268.       ------------------------------------
  269.  
  270.       function Translate
  271.         (Source   : in Bounded_Wide_String;
  272.          Mapping  : in Wide_Maps.Wide_Character_Mapping)
  273.          return     Bounded_Wide_String;
  274.  
  275.       procedure Translate
  276.         (Source   : in out Bounded_Wide_String;
  277.          Mapping  : in Wide_Maps.Wide_Character_Mapping);
  278.  
  279.       function Translate
  280.         (Source  : in Bounded_Wide_String;
  281.          Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
  282.          return    Bounded_Wide_String;
  283.  
  284.       procedure Translate
  285.         (Source  : in out Bounded_Wide_String;
  286.          Mapping : in Wide_Maps.Wide_Character_Mapping_Function);
  287.  
  288.       ---------------------------------------
  289.       -- Wide_String Transformation Subprograms --
  290.       ---------------------------------------
  291.  
  292.       function Replace_Slice
  293.         (Source   : in Bounded_Wide_String;
  294.          Low      : in Positive;
  295.          High     : in Natural;
  296.          By       : in Wide_String;
  297.          Drop     : in Truncation := Error)
  298.          return     Bounded_Wide_String;
  299.  
  300.       procedure Replace_Slice
  301.         (Source   : in out Bounded_Wide_String;
  302.          Low      : in Positive;
  303.          High     : in Natural;
  304.          By       : in Wide_String;
  305.          Drop     : in Truncation := Error);
  306.  
  307.       function Insert
  308.         (Source   : in Bounded_Wide_String;
  309.          Before   : in Positive;
  310.          New_Item : in Wide_String;
  311.          Drop     : in Truncation := Error)
  312.          return     Bounded_Wide_String;
  313.  
  314.       procedure Insert
  315.         (Source   : in out Bounded_Wide_String;
  316.          Before   : in Positive;
  317.          New_Item : in Wide_String;
  318.          Drop     : in Truncation := Error);
  319.  
  320.       function Overwrite
  321.         (Source    : in Bounded_Wide_String;
  322.          Position  : in Positive;
  323.          New_Item  : in Wide_String;
  324.          Drop      : in Truncation := Error)
  325.          return      Bounded_Wide_String;
  326.  
  327.       procedure Overwrite
  328.         (Source    : in out Bounded_Wide_String;
  329.          Position  : in Positive;
  330.          New_Item  : in Wide_String;
  331.          Drop      : in Truncation := Error);
  332.  
  333.       function Delete
  334.         (Source  : in Bounded_Wide_String;
  335.          From    : in Positive;
  336.          Through : in Natural)
  337.          return    Bounded_Wide_String;
  338.  
  339.       procedure Delete
  340.         (Source  : in out Bounded_Wide_String;
  341.          From    : in Positive;
  342.          Through : in Natural);
  343.  
  344.       ---------------------------------
  345.       -- Wide_String Selector Subprograms --
  346.       ---------------------------------
  347.  
  348.       function Trim
  349.         (Source : in Bounded_Wide_String;
  350.          Side   : in Trim_End)
  351.          return   Bounded_Wide_String;
  352.  
  353.       procedure Trim
  354.         (Source : in out Bounded_Wide_String;
  355.          Side   : in Trim_End);
  356.  
  357.       function Trim
  358.         (Source  : in Bounded_Wide_String;
  359.           Left   : in Wide_Maps.Wide_Character_Set;
  360.           Right  : in Wide_Maps.Wide_Character_Set)
  361.           return   Bounded_Wide_String;
  362.  
  363.       procedure Trim
  364.         (Source : in out Bounded_Wide_String;
  365.          Left   : in Wide_Maps.Wide_Character_Set;
  366.          Right  : in Wide_Maps.Wide_Character_Set);
  367.  
  368.       function Head
  369.         (Source : in Bounded_Wide_String;
  370.          Count  : in Natural;
  371.          Pad    : in Wide_Character := Wide_Space;
  372.          Drop   : in Truncation := Error)
  373.          return   Bounded_Wide_String;
  374.  
  375.       procedure Head
  376.         (Source : in out Bounded_Wide_String;
  377.          Count  : in Natural;
  378.          Pad    : in Wide_Character  := Wide_Space;
  379.          Drop   : in Truncation := Error);
  380.  
  381.       function Tail
  382.         (Source : in Bounded_Wide_String;
  383.          Count  : in Natural;
  384.          Pad    : in Wide_Character  := Wide_Space;
  385.          Drop   : in Truncation := Error)
  386.          return Bounded_Wide_String;
  387.  
  388.       procedure Tail
  389.         (Source : in out Bounded_Wide_String;
  390.          Count  : in Natural;
  391.          Pad    : in Wide_Character  := Wide_Space;
  392.          Drop   : in Truncation := Error);
  393.  
  394.       ------------------------------------
  395.       -- Wide_String Constructor Subprograms --
  396.       ------------------------------------
  397.  
  398.       function "*"
  399.         (Left  : in Natural;
  400.          Right : in Wide_Character)
  401.          return  Bounded_Wide_String;
  402.  
  403.       function "*"
  404.         (Left  : in Natural;
  405.          Right : in Wide_String)
  406.          return  Bounded_Wide_String;
  407.  
  408.       function "*"
  409.         (Left  : in Natural;
  410.          Right : in Bounded_Wide_String)
  411.          return  Bounded_Wide_String;
  412.  
  413.       function Replicate
  414.         (Count : in Natural;
  415.          Item  : in Wide_Character;
  416.          Drop  : in Truncation := Error)
  417.          return  Bounded_Wide_String;
  418.  
  419.       function Replicate
  420.         (Count : in Natural;
  421.          Item  : in Wide_String;
  422.          Drop  : in Truncation := Error)
  423.          return  Bounded_Wide_String;
  424.  
  425.       function Replicate
  426.         (Count : in Natural;
  427.          Item  : in Bounded_Wide_String;
  428.          Drop  : in Truncation := Error)
  429.          return  Bounded_Wide_String;
  430.  
  431.    private
  432.       Wide_NUL : constant Wide_Character := Wide_Character'Val (0);
  433.  
  434.       type Bounded_Wide_String is record
  435.          Length : Length_Range := 0;
  436.          Data   : Wide_String (1 .. Max_Length);
  437.       end record;
  438.  
  439.       Null_Bounded_Wide_String : constant Bounded_Wide_String :=
  440.                (Length => 0, Data => (1 .. Max_Length => Wide_NUL));
  441.  
  442.       --  Pragma Inline declarations (GNAT specific additions)
  443.  
  444.       pragma Inline ("=");
  445.       pragma Inline ("<");
  446.       pragma Inline ("<=");
  447.       pragma Inline (">");
  448.       pragma Inline (">=");
  449.       pragma Inline ("&");
  450.       pragma Inline (Count);
  451.       pragma Inline (Element);
  452.       pragma Inline (Find_Token);
  453.       pragma Inline (Index);
  454.       pragma Inline (Index_Non_Blank);
  455.       pragma Inline (Length);
  456.       pragma Inline (Replace_Element);
  457.       pragma Inline (Slice);
  458.       pragma Inline (To_Bounded_Wide_String);
  459.       pragma Inline (To_Wide_String);
  460.  
  461.    end Generic_Bounded_Length;
  462.  
  463. end Ada.Strings.Wide_Bounded;
  464.